﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SosBL;
using SosData;
using SosForms;

namespace UOCmaker
{
    public partial class FormPlantillaEditor : FormDetalle
    {
        sosContext db = null;
        Plantilla _plantilla = null;

        #region " Constructores "

        /// <summary>
        /// Constructor
        /// </summary>
        public FormPlantillaEditor()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="plantilla">plantilla</param>
        public FormPlantillaEditor(Plantilla plantilla)
        {
            InitializeComponent();
            db = new sosContext();
            _plantilla = (from p in db.Plantillas.Where(p => p.Id == plantilla.Id) select p).FirstOrDefault();
            
            if (_plantilla == null)
            {
                _plantilla = new Plantilla();
                _plantilla.Grupo = plantilla.Grupo;
                db.Plantillas.Add(_plantilla);
            }

            bindingSource.DataSource = _plantilla;

            GruposBindingSource.DataSource = db.GruposPlantilla.ToList();
            UsuariobindingSource.DataSource = db.Users.ToList();


        }

        /// <summary>
        /// Form Load
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void FormPlantillaAñadirEditar_Load(object sender, EventArgs e)
        {
            // bindingSource.DataSource = _plantilla;
        }

        #endregion

        #region " Controles PlantillaContenido "

        /// <summary>
        /// Añadir PlantillaContenido
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void butAñadirPlantillaContenido_Click(object sender, EventArgs e)
        {
            this.AñadirPlantillaContenido();
        }

        /// <summary>
        /// Editar PlantillaContenido
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void butEditarPlantillaContenido_Click(object sender, EventArgs e)
        {
            this.EditarPlantillaContenido();
        }

        /// <summary>
        /// Borrar PlantillaContenido
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void butBorrarPlantillaContenido_Click(object sender, EventArgs e)
        {
            PlantillaContenido pc = (PlantillaContenido)plantillaContenidosBindingSource.Current;
            plantillaContenidosBindingSource.Remove(pc);
        }

        #endregion

        #region " Metodo PlantillaContenido "

        /// <summary>
        /// Añadir PlantillaContenido
        /// </summary>
        private void AñadirPlantillaContenido()
        {
            Plantilla plantilla = (Plantilla)bindingSource.Current;
            PlantillaContenido pc = new PlantillaContenido();
            FormPlantillaContenidoEditor plantContenidoFrm = new FormPlantillaContenidoEditor(pc, plantilla);
            plantContenidoFrm.ModoForm = _modoForm.Añadir;
            plantContenidoFrm.ShowDialog();

            if (!plantContenidoFrm.cancelado)
            {
                //plantilla.PlantillaContenidos.Add(plantContenidoFrm._plantillaContenido);
                using (var db = new sosContext())
                {
                    Plantilla pl = (from p in db.Plantillas.Where(p => p.Id == plantilla.Id) select p).FirstOrDefault();
                    pc = plantContenidoFrm._plantillaContenido;
                    pl.PlantillaContenidos.Add(pc);
                    db.SaveChanges();
                }
            }
        }

        /// <summary>
        /// Editar PlantillaContenido
        /// </summary>
        private void EditarPlantillaContenido()
        {
            PlantillaContenido pc = (PlantillaContenido)plantillaContenidosBindingSource.Current;

            FormPlantillaContenidoEditor plantContenidoFrm = new FormPlantillaContenidoEditor(pc);
            plantContenidoFrm.ModoForm = _modoForm.Editar;
            plantContenidoFrm.ShowDialog();

            if (!plantContenidoFrm.cancelado)
            {
                using (var db = new sosContext())
                {
                    pc = plantContenidoFrm._plantillaContenido;
                    db.SaveChanges();
                }
            }
        }

        /// <summary>
        /// Borrar PlantillaContenido
        /// </summary>
        private void BorrarPlantillaContenido()
        {
            PlantillaContenido pc = (PlantillaContenido)plantillaContenidosBindingSource.Current;
            if (MessageBox.Show("¿Seguro que quiere eliminar esta plantilla?", "Eliminar plantilla", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes)
            {
                this.GridViewPlantillasContenido.Refresh();
            }
        }

        #endregion

        #region " Metodos Plantilla "

        /// <summary>
        /// Guardar cambios
        /// </summary>
        public override void Guardar()
        {
            bindingSource.EndEdit();
            db.SaveChanges();
            db.Dispose();
            cancelado = false;
            this.Close();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void butUOCsais_Click(object sender, EventArgs e)
        {
            PlantillaUOCsai uocSai = new PlantillaUOCsai();
            Plantilla p = (Plantilla)bindingSource.Current;
            FormUOCsais UOCsaisFrm = new FormUOCsais(p);
            UOCsaisFrm.MdiParent = this;
            UOCsaisFrm.Show();
        }
        #endregion

    }
}
